Skip to content

fix(v28): simpler call for descriptors#3301

Merged
RobinTail merged 1 commit intomake-v28from
fix-simpler-call-descriptors
Apr 6, 2026
Merged

fix(v28): simpler call for descriptors#3301
RobinTail merged 1 commit intomake-v28from
fix-simpler-call-descriptors

Conversation

@RobinTail
Copy link
Copy Markdown
Owner

@RobinTail RobinTail commented Apr 6, 2026

simple improvement

@RobinTail RobinTail added this to the v28 milestone Apr 6, 2026
@RobinTail RobinTail added the refactoring The better way to achieve the same result label Apr 6, 2026
@RobinTail RobinTail changed the base branch from master to make-v28 April 6, 2026 18:54
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 6, 2026

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

This major version release (v27→v28-beta) introduces breaking changes to the createConfig() API with property renames (wrongMethodBehaviorhintAllowedMethods, methodLikeRouteBehaviorrecognizeMethodDependentRoutes), drops Node.js 20 support, replaces unrun with direct node execution, systematically adds explicit .ts file extensions to all imports, and converts numerous imports to type-only semantics with corresponding TypeScript compiler configuration updates.

Changes

Cohort / File(s) Summary
Version & Dependencies Bump
CHANGELOG.md, SECURITY.md, express-zod-api/package.json, migration/package.json, zod-plugin/CHANGELOG.md, zod-plugin/package.json
Version bumped to v28.0.0-beta.x; Node.js engine constraints narrowed to ^22.19.0 || ^24.0.0; undici, eslint, typescript-eslint dependencies updated.
Configuration API Breaking Changes
express-zod-api/src/config-type.ts, express-zod-api/src/routing-walker.ts, express-zod-api/src/routing.ts, express-zod-api/src/documentation.ts, migration/index.ts, migration/index.spec.ts
Renamed CommonConfig properties: wrongMethodBehavior (404|405) → hintAllowedMethods (boolean); methodLikeRouteBehavior ("method"|"path") → recognizeMethodDependentRoutes (boolean). Updated routing logic, migration rules, and tests to reflect new config semantics.
TypeScript File Extension Resolution
example/*, cjs-test/tsconfig.json, compat-test/quick-start.spec.ts, esm-test/quick-start.spec.ts, express-zod-api/tsdown.config.ts, migration/tsdown.config.ts, tools/license.ts, tools/make-tests.ts, tsconfig.json, zod-plugin/tsdown.config.ts
Added explicit .ts extensions to local module imports; updated tsconfig base from node20 to node22; enabled allowImportingTsExtensions and verbatimModuleSyntax compiler options; updated JSON import assertions.
Type-Only Imports Refactoring
express-zod-api/src/...ts (builtin-logger, common-helpers, config-type, deep-checks, diagnostics, documentation-helpers, documentation, endpoint, endpoints-factory, errors, graceful-helpers, integration-base, integration, json-schema-helpers, last-resort, middleware, result-handler, result-helpers, routing-walker, routing, server-helpers, server, sse, testing, zts-helpers, zts), express-zod-api/tests/...spec.ts (builtin-logger, common-helpers, config-type, deep-checks, documentation-helpers, documentation, endpoints-factory, index, integration, io-schema, logger-helpers, method, result-handler, routing, server-helpers, server, sse, system, testing, zts), example/middlewares.ts, issue952-test/tags.ts, README.md
Converted numerous imports to type-only syntax (import type) across ~70 files to eliminate runtime dependencies and improve tree-shaking; affected imports include Express types, internal config/routing types, and middleware/handler interfaces.
Build System & Script Execution
.github/workflows/...yml, example/package.json, package.json, migration/package.json, zod-plugin/package.json
Replaced unrun tool invocations with direct node execution in npm scripts and GitHub Actions workflows; removed unrun from dev dependencies; updated build scripts from tsdown --config-loader unrun to tsdown.
Promise API Modernization
express-zod-api/src/graceful-helpers.ts, express-zod-api/src/middleware.ts, express-zod-api/tests/graceful-shutdown.spec.ts
Refactored Promise construction from new Promise((resolve, reject) => ...) to Promise.withResolvers<T>() pattern in async helper functions.
Workflow & CI Trigger Updates
.github/workflows/codeql-analysis.yml, .github/workflows/headers.yml, .github/workflows/node.js.yml
Updated GitHub Actions branch triggers: removed v23, added v27 and make-v28; changed headers.ts command from pnpm unrun to pnpm node; narrowed Node.js test matrix to 22.19.0 and 24.0.0 only.
ESLint & Linting Configuration
eslint.config.js, compat-test/eslint.config.js, migration/README.md, package.json, pnpm-workspace.yaml
Updated ESLint from v9 to v10; enabled no-duplicate-imports rule globally; updated migration rule reference from migration/v27 to migration/v28; adjusted publicHoistPattern and updated typescript-eslint versions.
Documentation & Test Updates
README.md, compat-test/package.json, compat-test/migration.spec.ts, example/index.spec.ts, example/generate-documentation.ts, example/generate-client.ts
Updated README examples to use type-only imports and new config property names; adjusted migration test fixtures to validate property renaming; updated compat/example test setup with new module resolution patterns.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

  • #2939: Implements the same config property renaming (wrongMethodBehavior/methodLikeRouteBehaviorhintAllowedMethods/recognizeMethodDependentRoutes) and related routing/migration logic updates that form the core API changes in this PR.
  • #2889: Migrates the build system from tsup to tsdown, including tsdown.config updates and build script changes that are applied across multiple packages in this PR.
  • #3080: Implements systematic addition of explicit .ts file extensions to import specifiers across the codebase and related TypeScript compiler configuration changes matching this PR's module-resolution updates.

Suggested labels

breaking, CI/CD, documentation


🐰 A hop, skip, and a type-safe leap,
v28's config now runs deep,
With .ts imports clear,
And types holding dear,
Breaking changes for a brighter sweep! 🚀

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title mentions only a minor refactoring detail ('simpler call for descriptors') but the PR makes extensive changes including version bumps (v27→v28), breaking API changes to createConfig(), TypeScript import optimizations, Node.js version constraints, and migration tooling updates. Revise the title to reflect the main purpose, such as 'chore(v28): major version release with config API updates and build optimizations' or similar to accurately represent the comprehensive scope of changes.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-simpler-call-descriptors

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@socket-security

This comment was marked as outdated.

Copy link
Copy Markdown
Contributor

@pullfrog pullfrog Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — no issues found.

Pullfrog  | View workflow run | Using Claude Opus𝕏

@coveralls-official
Copy link
Copy Markdown

Coverage Status

coverage: 100.0%. remained the same — fix-simpler-call-descriptors into make-v28

@RobinTail RobinTail merged commit c4603d4 into make-v28 Apr 6, 2026
11 of 12 checks passed
@RobinTail RobinTail deleted the fix-simpler-call-descriptors branch April 6, 2026 18:57
RobinTail added a commit that referenced this pull request May 10, 2026
![Koko Da
Doll](https://metro.co.uk/wp-content/uploads/2023/04/SEI_152850843-60b7-e1682088625316.jpg?quality=90&strip=all&w=646)

[**Koko Da Doll**](https://en.wikipedia.org/wiki/Koko_Da_Doll) (aka
_Rasheeda Williams_) was a 35-year-young Black trans woman, performance
artist, singer, and star
of the acclaimed documentary **Kokomo City**. Born in College Park,
Georgia, she was based in Atlanta and
became a prominent voice for transgender visibility and the rights of
Black trans women.

She was a talented rap artist who released two singles: "Trick" (2020)
and "Bulletproof" (2022).

A song she created was featured on the TV show _The Chi_ in 2023,
showcasing her artistic talents beyond her advocacy work.

Koko was one of four Black trans women featured in the groundbreaking
documentary [**Kokomo City**](https://www.magpictures.com/kokomocity/),
directed by D. Smith. The film premiered at the 2023 Sundance Film
Festival and won both the NEXT Innovator Award and NEXT Audience
Award. It also received the Berlinale Panorama Audience Award.

In the film, Koko spoke openly about her experiences as a sex worker and
the challenges faced by Black trans women. She discussed doing sex work
to avoid homelessness for her mother, sister, and herself.

After the Sundance première, Koko wrote on Instagram:

> _"I will be the reason there's more opportunities and doors opening
for transgender girls."_

She hoped that her participation in the film would help save lives and
create more opportunities for young trans women.

On April 18, 2023, at around 11pm, Koko Da Doll was found dead with a
gunshot wound on a sidewalk near Holmes Shopping
Plaza in Southwest Atlanta. She was 35 years old.

A 17-year-old suspect was arrested on April 27, 2023, on suspicion of
murder, aggravated assault, and possession of a firearm in the
commission of a felony. Atlanta police indicated that a hate crime
investigation was ongoing.

Koko was the 13th trans person killed in the United States in 2023.
Following her death, _Kokomo City_ was dedicated to her memory. She was
honored during the In Memoriam segment at the 2023 BET Awards.

_The New York Times_ described her as someone who _"brims with vitality,
ambition, and insight"_ — a woman who fought tooth and nail for her life
and self-worth.

Her tragic death serves as a stark reminder of the ongoing violence and
discrimination faced by trans women in America.

[AP
News](https://apnews.com/article/koko-da-doll-kokomo-city-killed-transgender-0c02d2c623deffebceaa74912e308609)
·
[AL.com](https://www.al.com/reckon/2023/07/murdered-kokomo-city-star-koko-da-doll-shares-her-hopes-for-young-trans-girls.html)
·
[TDoR](https://tdor.translivesmatter.info/reports/2023/04/18/rasheeda-williams_atlanta-georgia-usa_0c3bc39f)


-------------------------------

Version 28 drops support for Node.js versions below 22.19.0, adds full
Zod 4.4+ compatibility, and makes the Zod plugin an optional peer
dependency — you now need to install `@express-zod-api/zod-plugin`
manually to keep using `.example()`, `.label()`, and similar methods,
while `brand()` is replaced by `.xBrand()` to avoid conflicts with Zod
4.4. Several config properties were renamed for clarity:
`wrongMethodBehavior` → `hintAllowedMethods`, `methodLikeRouteBehavior`
→ `recognizeMethodDependentRoutes`, `shortDescription` → `summary`, and
`noContent` → `noBodySchema`. The `hasSummaryFromDescription` boolean
was replaced with a more flexible `summarizer` function that lets you
customize how endpoint summaries are derived. The automated migration
tool has been updated accordingly, now requiring `eslint@^10.0.0` and
`typescript-eslint@^8.58.0`.

- #3207 
- #3242
- #3267 
- #3268 
- #3287 
- #3294 
- #3299 
- #3300 
- #3301 
- #3302 
- #3303 
- #3310 
- #3313 
- #3334
- #3340
- #3364 (incl. undo of #3357) 
- #3365

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* v28: public option/metadata renames (shortDescription → summary,
wrongMethodBehavior → hintAllowedMethods, methodLikeRouteBehavior →
recognizeMethodDependentRoutes, noContent → noBodySchema) and a
configurable documentation summarizer.

* **Documentation**
* CHANGELOG/README/SECURITY updated with v28 notes, summarizer docs,
migration examples and migration tool link; README shows Zod plugin as
optional and xBrand usage.

* **Chores**
* Zod plugin moved to optional/peer, branding API renamed (.brand →
.xBrand); tooling and Node/module resolution updates.

* **Tests**
* Test suite updated to align with renames, summarizer,
metadata/examples and branding changes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoring The better way to achieve the same result

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant